function [xfinal] = simplex (archivo)
%                          SIMPLEX
% Recibe un archivo .txt que contiene un problema de programacion
% lineal en un formato deteminado y lo resuelve usando el metodo simplex.
% Para que funcione se necesitan otras (muchas) subrutinas.
% Para ver el formato que se debe utilizar, ver el wiki del proyecto
% en    
%        http://code.google.com/p/metodo-simplex-itam/w/list
%
%
% usage:            [xfinal] = simplex (archivo)
%   donde:
%
%       archivo := archivo .txt con la informacion del problema
%
%                           - Marcela Maldonado Figueroa -
%                             - Pedro Orozco del Pino -
%                            - Jose Alonso Solis Lemus -
%
str = strcat('\nEmpezando el Metodo SIMPLEX con el archivo ', archivo, '\n\n');
fprintf(str);
cpu = cputime;
[A, SA, b, c, min, art, indices] = simplexParse(archivo);
xfinal=-1;
tot=length([A SA]);
if isempty(art)
    % no hubo variables artificiales
    [xstar, ind0] = simplexCore(A, SA, b, c, indices);
    [xfinal, ZjCj, Y, z0, dz]=simplexSolucion(xstar,ind0, A, SA, c, b);
    simplexReporte(xfinal, ZjCj, Y, z0, ind0, archivo);
else
    % Hubo variables artificiales hay que echarnoslas.
    cart=zeros(tot,1);
    for i=1:length(art)
        cart(find(indices == art(i)))=1;
    end
    fprintf('\n\t\t FASE I\n');
    [xfase, ind0] = simplexCore(A, SA, b, cart, indices);
    xart=simplexSolucion(xfase, ind0, A, SA, cart, b);
    if sum(xart(art))==0
        %YES!!!
        fprintf('\n\t\t FASE II\n');
        a=length(art);
        [rS, cS] = size(SA);
        SA=SA(:,1:(cS-a));

        [xstar, ind1]=simplexCore(A, SA, b, c, ind0);        
        ind1 = ind1(find(ind1<art(1)));
        [xfinal, ZjCj, Y, z0, dz]=simplexSolucion(xstar,ind1, A, SA, c, b);
         simplexReporte(xfinal, ZjCj, Y, z0, ind1, archivo);
    else
        fprintf('\n\t La Solucion no es factible\n');
    end
end



cpu = cputime - cpu;
fprintf('\n\nSaliendo del Metodo SIMPLEX. Tiempo de computo: %e\n', cpu);
%       Idea para entregar los costos y demas joterias
%   ind0 o ind1 esta la informacion sobre que variables son
%   basicas y cuales son no basicas, con esa informacion y con
%   xstar podemos construir sin problemas la informacion
%   necesaria.
%
%   Checar que si es no factible entonces que tenemos devolver.
%
%  

